package com.hk.utils;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;

public class BeanUtils {

	public static Method getSetMethod(Object beanInstance,String name) {
		/***
		 * 
		 * 通过内省技术得到bean的set方法  beanutils中有个分析器
		 */
		Method method = null;
		BeanInfo beanInfo;
		try {
			beanInfo = Introspector.getBeanInfo(beanInstance.getClass());
			PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
			if(pds!=null) {
				//遍历这些属性
				for(PropertyDescriptor pd : pds) {
					String pdName = pd.getName();//属性的名字
					//如果属性的名字跟set名字一样则返回
					if(pdName.equals(name)) {
						//得到注入属性的方法
						method = pd.getWriteMethod();
						break;
					}
				}
			}
		} catch (IntrospectionException e) {
			e.printStackTrace();
		}
		//根据beanInfo 获得所有属性的描述器
		if(method==null)
			throw new RuntimeException("请检查方法是否有set方法"+name);
		return method;
	}

}
